package com.sheng.leetcode.year2022.month08.day01;

import org.junit.Test;

import java.util.*;

/**
 * @author liusheng
 * @date 2022/08/01
 *
 * 1374. 生成每种字符都是奇数个的字符串
 *
 * 给你一个整数 n，请你返回一个含 n 个字符的字符串，其中每种字符在该字符串中都恰好出现 奇数次 。
 * 返回的字符串必须只含小写英文字母。如果存在多个满足题目要求的字符串，则返回其中任意一个即可。
 *
 * 示例 1：
 * 输入：n = 4
 * 输出："pppz"
 * 解释："pppz" 是一个满足题目要求的字符串，因为 'p' 出现 3 次，且 'z' 出现 1 次。当然，还有很多其他字符串也满足题目要求，比如："ohhh" 和 "love"。
 *
 * 示例 2：
 * 输入：n = 2
 * 输出："xy"
 * 解释："xy" 是一个满足题目要求的字符串，因为 'x' 和 'y' 各出现 1 次。当然，还有很多其他字符串也满足题目要求，比如："ag" 和 "ur"。
 *
 * 示例 3：
 * 输入：n = 7
 * 输出："holasss"
 *
 * 提示：
 *
 * 1 <= n <= 500
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/generate-a-string-with-characters-that-have-odd-counts
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class LeetCode1374 {

    @Test
    public void test01() {
//        int n = 4;
//        int n = 2;
//        int n = 7;
        int n = 27;
        System.out.println(new Solution().generateTheString(n));
    }

}
class Solution {
    public String generateTheString(int n) {
        //A-Z(65-90)
        //a-z(97-122)
//        char[] chars = new char[n];
//        Arrays.fill(chars, 'a');
//        if (n % 2 == 0) {
//            //偶数
//            chars[0] = 'b';
//        }
//        return new String(chars);
        //缺点，拆分的奇数数量不能超过26个
        int count = 0;
        Random random = new Random();
        List<Integer> list = new ArrayList<>();
        int m = n;
        while (m > 0) {
            int i1 = random.nextInt(m);
            if (i1 % 2 == 0) {
                //随机出来的数是个奇数
                i1 += 1;
            }
            m -= i1;
            list.add(i1);
            count++;
        }
        // 获取字符对应的数量
        Map<Character, Integer> map = new HashMap<>(26);
        for (Integer integer : list) {
            boolean flag = true;
            while (flag) {
                int i1 = random.nextInt(26) + 97;
                char c = (char) i1;
                if (map.containsKey(c)) {
                    continue;
                } else {
                    map.put(c, integer);
                    flag = false;
                }
            }
        }
        //随机排列
        return "";
    }
}
